// 进行axios 的二次封装
import axios from 'axios';
let baseURL = ''
// 判断nodejs 的环境变量 是开发(development)还是生产(production)
//第一种方式解决: // @ts-ignore // 忽略ts语法检查
// @ts-ignore
if (process.env.NODE_ENV == 'development') {
    baseURL = '/api'
} else {
    baseURL = 'http://47.94.148.165:3001'
}

const instance = axios.create({
    baseURL: baseURL,
    timeout: 6000,
    headers: { 'Content-Type': 'application/json' }  // 设置post提交时的参数格式
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 01: 将token 添加到header 头中
    let token = localStorage.getItem('token');
    if (token) {
        config.headers.token = token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
import { ElMessage } from 'element-plus';
import {useUserStore} from '@/stores/userstore'
const userStore = useUserStore();
instance.interceptors.response.use(function (response) {
    // 判断状态码,对所有的相应统一处理 token失效的问题
        if(response.data.code =='10119'){
            // 01:提示:
            ElMessage({
                    message: 'token失效,请重新登录!!',
                    type: 'error',
                    duration:500,
                    onClose(){
                        // 1s后关闭时, 自动触发回调函数
                        localStorage.removeItem('pinia-user')
                        // 03:返回到登录页
                        window.location.href ='/login'
                    }
            })
            // 02: 清除登录时的一些标记
            localStorage.removeItem('token');
            // 重置pinia仓库数据恢复到到登录前
            userStore.setAdminNameFn('');
            userStore.setCheckedKeysFn([]);
            userStore.setRoleFn(1)
            
        }
    return response.data;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});


export default instance